/*
	* Copyright 2013 Robert Peszek.
	*
	* Licensed under the Apache License, Version 2.0 (the "License");
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	*     http://www.apache.org/licenses/LICENSE-2.0
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
	*/
package fun.expressions

import static fpig.common.functions.FpigBase.*
import static fpig.expressions.MComprehensionSyntax.*
import static fpig.groovylists.functions.InAndOutOfFunLists.*

class MComprehendSyntaxTests extends GroovyTestCase{


    void testMaybeComprehension() {
		def res = comprehend {
			into(x) << from{ just(3) }
			into(y) << from{ just(2) }
			output{ just(x+y) }
		}					
		
		assert 5 == unjust(res)	
 	}

	void testMaybeComprehension2() {
		def res = comprehend {
			into(x) << from{ just(3) }
			into(y) << from{ just(x+1) }
			output{ just(y-x) }
		}
		
		assert 1 == unjust(res)
	 }

	void testListComprehension() {
		def res = comprehend {
			into(x) << from{ f ([1,2,3]) }
			into(y) << from{ f ([10,100]) }
			output{ f([x*y]) }
		}
		
//		println (funlistOut << res)
//		println (funlistOut << res)
//		println (funlistOut << res)
		
		def resList = funlistOut << res
		
		assert [10,100,20,200,30,300] == resList

	 }

}
